<?
class PessoaFisica extends Pessoa {
	  // atributos de instância de PessoaFisica
	  private $cpf;
	  private $rg;
	  private $atributos;
	 
	  // ------------ ### ------------- //
	  // método construtor
	  public function __construct($id = "", $nome = "", $email = "",
	                              $telefone = "", $login = "", 
	                              $senha = "", $endereco = "",
	                              $cpf = "", $rg = "") {

		//parent::__construct($id,$nome,$email,$login,$senha);
	    $this->setCpf($cpf);
	    $this->setRg($rg);
	  }
	  
	  // ------------ ### ------------- //
	  
	  
	  public function validarCampos(){
	
	  	if (!$this->validarCamposBasicos())
	  		return false;
	
	  	if ($this->validarCpf())
	  		throw CpfInexistente();
	  	
		return false;
		
	  }
  
	  private function validarCpf() {
		    // recuperando o CPF sem dígitos e hifen
		    $cpf = str_replace(array(".", "-"), "", $this->getCpf());
		    if (strlen($cpf) < 11) return false;
	  	if (substr($metodo,0,3)=="set"){
	  		$this->atributos[strtolower(substr($metodo,3))] = $valor[0];
	  	}elseif (substr($metodo,0,3)=="get"){
	  		return $this->atributos[strtolower(substr($metodo,3))];
	  	}	
		    
		    // invalidando CPFs como 11111111111
		    for ($x = 0; $x <= 9; $x++) {
		      if ($cpf == str_repeat($x,11)) return false;
		    }
		
		    // recuperando o dígito verificador
		    $dvInformado = substr($cpf, 9);
		
		    // verificando os valores para o primeiro dígito verificador
		    $valor = 10;
		    $soma = 0;
		    for ($x = 0; $x < 9; $x++) {
		      $soma += $cpf{$x} * $valor--;
		    }
		    $dv1 = $soma % 11;
		    $dv1 = ($dv1 < 2) ? 0 : 11 - $dv1;
		
		    // verificando os valores para o segundo dígito verificador
		    $valor = 11;
		    $soma = 0;
		    for ($x = 0; $x < 10; $x++) {
		      $soma += $cpf{$x} * $valor--;
		    }
		
		    $dv2 = $soma % 11;
		    $dv2 = ($dv2 < 2) ? 0 : 11 - $dv2;
		    if ($dvInformado{1} != $dv2) return false;
		
		    // conferindo o dígito verificador final
		    $dvFinal = $dv1 * 10 + $dv2;
		    if ($dvFinal != $dvInformado) return false;
		
		    return true;
	}

	public function __toString() {
	    return $this->getNome() . " - " . $this->cpf;
	 }
	
}

?>
